package cn.edu.wynu.operator;

public class OperatorDemo05 {
    public static void main(String[] args) {
        // 1.逻辑运算符
        boolean a = true;
        boolean b = false;
        // 逻辑与运算，两个运算符必须都是true，才为true，否则为false;
        System.out.println("a && b : " + (a && b));
        // 逻辑或运算，两个运算符有一个为true，为true，否则为false;
        System.out.println("a || b : " + (a || b));
        // 逻辑非运算，一个运算符为true，则为false，否则为true;
        System.out.println("!a : " + !a); // !a 为false
        System.out.println("!b : " + !b); // !b 为true
        // 逻辑异或运算， 两个运算符必须有一个为true，一个为false，则为true，否则为false;
        System.out.println("a ^ b : " + (a ^ b));

        System.out.println(2>1 ^ 3>2);
        System.out.println(2>1 ^ 3<2);

        System.out.println("---------------------");

        // 2.短路运算
        //&& 运算符，短路与
        // 左边为false，右边不参与运算，直接返回false;
        // 左边为true，右边参与运算，返回右边的值;
        int i = 10;
        int j = 20;
        System.out.println(i>30 && ++j > 40);
        System.out.println(j); // j的值为20,因为i>30为false,j的右边不参与运算
        System.out.println(i>30 & ++j > 40);
        System.out.println(j); // j的值为21，因为i>30为false,j的右边参与运算

        System.out.println(4<5 && 3<2); // 4<5为true,3<2为false，左边true，右边参与运算，返回右边的值，所以结果为false
        System.out.println(4<5 && 3>2); // 4<5为true,3>2为true，左边true，右边参与运算，返回右边的值，所以结果为true

        System.out.println(4>5 && 3<2); // 左边为false，右边不参与运算，直接返回false
        System.out.println(4>5 && 3>2); // 左边为false，右边不参与运算，直接返回false

        System.out.println("-----------------------");

        // || 运算符，短路或
        // 左边为true，右边不参与运算，直接返回true;
        int k = 10;
        int l = 20;
        System.out.println(k<30 || ++l > 40);
        System.out.println(l); // l的值为20,因为k<30为true,l的右边不参与运算
        System.out.println(k<30 | ++l > 40);
        System.out.println(l); // l的值为21，因为k<30为true,l的右边参与运算

        System.out.println(4>5 || 3<2); // 4>5为false,3<2为false，左边false，右边参与运算，返回右边的值，所以结果为false
        System.out.println(4>5 || 3>2); // 4>5为false,3>2为true，左边false，右边参与运算，返回右边的值，所以结果为true

        System.out.println(4<5 || 3<2); // 左边为true，右边不参与运算，直接返回true
        System.out.println(4<5 || 3>2); // 左边为true，右边不参与运算，直接返回true

    }
}
